<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>小历史</title>
	<link rel="stylesheet" type="text/css" href="static/css/index1.css">
	<script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script>
	<script src="static/js/index.js"></script>
</head>
<body>
<header class="header">
	<div class="layout">
		<div class="logo">
			<img src="static/images/logo.png">
			<span>小历史</span>
		</div>
		<div class="menu">
			<ul>
				<li><a href="index.html" class="current">首页</a></li>
				<li><a href="">热门文章</a></li>
				<li><a href="">时间轴</a></li>
				<li><a href="">人物线</a></li>
				<li><a href="">关于我们</a></li>
			</ul>
			<img class="person" src="static/images/person.png">
			<a href="" class="login">登录</a>
		</div>
	</div>
</header>
<!--<div class="container">-->
<div class="article_detail">
		一、MySQL架构与历史
	<br/>
A.并发控制
<br/>
1.共享锁（shared lock，读锁）：共享的，相互不阻塞的
	<br/>
2.排他锁（exclusive lock，写锁）：排他的，一个写锁会阻塞其他的写锁和读锁
	<br/>
B.事务
	<br/>
1.事务ACID
	<br/>
* 原子性（atomicity）一个事务必须被视为一个不可分割的最小工作单元，整个事务中所有操作要么全部提交成功，要么全部失败回滚，对于一个事务来说，不可能只执行其中的一部分操作
	<br/>
* 一致性（consistency）数据库总是从一个一致性的状态转换到另外一个一致性的状态
	<br/>
* 隔离性（isolation）一个事务所做的修改在最终提交以前，对其他事务是不可见的
	<br/>
* 持久性（durability）一旦事务提交，则其所做的修改就会永久保存到数据库中
	<br/>
2.四种隔离级别
	<br/>
* READ UNCOMMITTED（未提交读），事务中的修改，即使没有提交，对其他事务也都是可见的，事务可以读取未提交的数据，也被称为脏读（Dirty Read），这个级别会导致很多问题
	<br/>
* READ COMMITTED（提交读），大多数数据库系统的默认隔离级别，一个事务开始时，只能“看见”已经提交的事务所做的修改，一个事务从开始直到提交之前，所做的任何修改对其他事务都是不可见的，也叫不可重复读（nonrepeatable read），有可能出现幻读（Phantom Read），指的是当某个事务在读取某个范围内的记录时，另外一个事务又在该范围内插入了新的记录，当之前的事务再次读取该范围的记录时，会产生幻行（Phantom Row）
	<br/>
* REPEATABLE READ（可重复读），通过InnoDB和XtraDB存储引擎，是MySQL的默认事务隔离级别
	<br/>
* SERIALIZABLE（可串行化）最高级别，通过强制事务串行执行，避免了幻读问题，会在读取的每一行数据上都加锁，可能导致大量的超时和锁争用的问题
	<br/>
3.死锁：指两个或多个事务在同一资源上相互占用，并请求锁定对方占用的资源，从而导致恶性循环的现象
	<br/>
4.事务日志：存储引擎在修改表的数据时只需要修改其内存拷贝，再把该修改行为记录到持久在硬盘上的事务日志中，而不用每次都将修改的数据本身持久到磁盘。事务日志持久以后，内存中被修改的数据在后台可以慢慢地刷回到磁盘，称为预写式日志（Write-Ahead Logging）
	<br/>
C.多版本并发控制
	<br/>
1.多版本并发控制（MVCC）是行级锁的一个变种，但是它在很多情况下避免了加锁操作，因此开销更低。虽然实现机制有所不同，但大都实现了非阻塞的读操作，写操作也只锁定必要的行
	<br/>
2.MVCC的实现，是通过保存数据在某个时间点的快照来实现的，有乐观和悲观两种，只在REPEATABLE READ和READ COMMITTED两个隔离级别下工作
	<br/>
D.MySQL的存储引擎
	<br/>
1.MySQL的.frm文件保存表的定义，SHOW TABLE STATUS显示表的相关信息
	<br/>
2.除非有非常特别的原因需要使用其他的存储引擎，否则应该优先考虑InnoDB引擎
	<br/>
3.不要轻易相信MyISAM比InnoDB快之类的经验之谈，这个结论并不是绝对的
	<br/>
				一、MySQL架构与历史
	<br/>
A.并发控制
	<br/>
1.共享锁（shared lock，读锁）：共享的，相互不阻塞的
	<br/>
2.排他锁（exclusive lock，写锁）：排他的，一个写锁会阻塞其他的写锁和读锁
	<br/>
B.事务
	<br/>
1.事务ACID
	<br/>
* 原子性（atomicity）一个事务必须被视为一个不可分割的最小工作单元，整个事务中所有操作要么全部提交成功，要么全部失败回滚，对于一个事务来说，不可能只执行其中的一部分操作
	<br/>
* 一致性（consistency）数据库总是从一个一致性的状态转换到另外一个一致性的状态
	<br/>
* 隔离性（isolation）一个事务所做的修改在最终提交以前，对其他事务是不可见的
	<br/>
* 持久性（durability）一旦事务提交，则其所做的修改就会永久保存到数据库中
	<br/>
2.四种隔离级别
	<br/>
* READ UNCOMMITTED（未提交读），事务中的修改，即使没有提交，对其他事务也都是可见的，事务可以读取未提交的数据，也被称为脏读（Dirty Read），这个级别会导致很多问题
	<br/>
* READ COMMITTED（提交读），大多数数据库系统的默认隔离级别，一个事务开始时，只能“看见”已经提交的事务所做的修改，一个事务从开始直到提交之前，所做的任何修改对其他事务都是不可见的，也叫不可重复读（nonrepeatable read），有可能出现幻读（Phantom Read），指的是当某个事务在读取某个范围内的记录时，另外一个事务又在该范围内插入了新的记录，当之前的事务再次读取该范围的记录时，会产生幻行（Phantom Row）
	<br/>
* REPEATABLE READ（可重复读），通过InnoDB和XtraDB存储引擎，是MySQL的默认事务隔离级别
	<br/>
* SERIALIZABLE（可串行化）最高级别，通过强制事务串行执行，避免了幻读问题，会在读取的每一行数据上都加锁，可能导致大量的超时和锁争用的问题
	<br/>
3.死锁：指两个或多个事务在同一资源上相互占用，并请求锁定对方占用的资源，从而导致恶性循环的现象
	<br/>
4.事务日志：存储引擎在修改表的数据时只需要修改其内存拷贝，再把该修改行为记录到持久在硬盘上的事务日志中，而不用每次都将修改的数据本身持久到磁盘。事务日志持久以后，内存中被修改的数据在后台可以慢慢地刷回到磁盘，称为预写式日志（Write-Ahead Logging）
	<br/>
C.多版本并发控制
	<br/>
1.多版本并发控制（MVCC）是行级锁的一个变种，但是它在很多情况下避免了加锁操作，因此开销更低。虽然实现机制有所不同，但大都实现了非阻塞的读操作，写操作也只锁定必要的行
	<br/>
2.MVCC的实现，是通过保存数据在某个时间点的快照来实现的，有乐观和悲观两种，只在REPEATABLE READ和READ COMMITTED两个隔离级别下工作
	<br/>
D.MySQL的存储引擎
	<br/>
1.MySQL的.frm文件保存表的定义，SHOW TABLE STATUS显示表的相关信息
	<br/>
2.除非有非常特别的原因需要使用其他的存储引擎，否则应该优先考虑InnoDB引擎
	<br/>
3.不要轻易相信MyISAM比InnoDB快之类的经验之谈，这个结论并不是绝对的
</div>
<!--</div>-->

<footer class="footer">
	<div class="contact">
		<span class="main-contact">联系我们</span><br>
		<span class="sub">为了更好的获取我们最新的产品资讯，您可以留下您的电子邮箱快速订阅我们的产品资讯<br>也可以通过以下任何方式关注我们的动态</span><br>
		<input class="email" type="text" name="" placeholder="someone@email.com">
		<input class="submit" type="button" name="" value="提交">
		<div class="contact-way">
			<img src="static/images/qq.png">
			<img src="static/images/blog.png">
			<img src="static/images/bird.png">
			<img src="static/images/earth.png">
		</div>
	</div>
	<div class="back">
		<div class="content">
			<span>@2018小历史</span>
			<span id="bnt_top" class="bnt_top" style="cursor:pointer ">top</span>
			<span id="bnt_like" class="bnt_top" style="cursor:pointer ">喜欢</span>
			<span id="bnt_collection" class="bnt_top" style="cursor:pointer ">收藏</span>
		</div>
	</div>
</footer>
</body>
</html>